'use strict';
// 引入 vk-unicloud
const vkCloud = require('vk-unicloud');
// 通过 vkCloud.createInstance 创建 vk 实例
const vk = vkCloud.createInstance({
	baseDir: __dirname,
	requireFn: require
});

const cacheNama = "z_timer_calc_reward-run-key";

exports.main = async (event, context) => {
	/**
	 * 独立定时器 - 自动奖励计算
	 * 每10分钟执行一次
	 */
	// "config": "0 */10 * * * * *",
	// 如果是阿里云，暂时需要用宝塔服务定时请求此云函数来实现（因为阿里云目前只支持1小时执行1次）

	// 判断任务机是否在运行中
	let runKey = await vk.globalDataCache.get(cacheNama);
	if (runKey) {
		return { code: 1, msg: "运行中" }
	}
	let max = 150;
	let cacheTime = 590;
	if (context.SOURCE !== 'timing') {
		cacheTime = 59;
		max = 15; // 因为非定时任务执行时，60秒就超时了，故max=15
	}
	// 标记运行开始
	await vk.globalDataCache.set(cacheNama, 1, cacheTime);

	let res = { code: 0, msg: "", runNum: 0 };

	// 循环运行max次，若返回没有任务需要执行，则停止循环
	for (let i = 0; i < max; i++) {
		res.runNum++;
		res.callFunctionRes = await uniCloud.callFunction({
			name: "router",
			data: {
				$url: "rewardMode/pub.reward.run",
				data: {
					key: "f766913ec9ac3d438c783d6a6a1c005b"
				}
			}
		});
		let msg = (res.callFunctionRes && res.callFunctionRes.result) ? res.callFunctionRes.result.msg : "";
		console.log(`第 ${res.runNum} 次运行结果：`, msg, "请求id：", res.callFunctionRes.requestId);
		if (["无任务执行", "无需执行", "正在执行中..."].indexOf(msg) > -1) {
			break;
		}
		await vk.pubfn.sleep(100);
	}
	// 标记运行结束
	await vk.globalDataCache.del(cacheNama);
	return res;
};
